/**
 * @file database.h
 * @brief connector for SQLite3 database
 * @copyright http://www.dreamincode.net/forums/topic/122300-sqlite-in-c/
 * @author TyVeryMuch
 * @date 02.10.11 16:40
 * @version 0.1
 */

#ifndef __DATABASE_H__
#define __DATABASE_H__

#include <string>
#include <vector>
#include <sqlite3.h>
	 
using namespace std;

/**
 * @brief Предоставляет инструменты манипулирования БД на уровне SQL-команд.
 */
class CDatabase {
public:
	/**
	 * @brief Класс для генерации исключений при обращении к БД.
	 */
	class dbErr {};
	
	/**
	 * @brief Конструктор класса. По-умолчанию создаёт соединение.
	 * @param filename - имя файла БД.
	 */
	CDatabase(const string filename);
	/**
	 * @brief Деструктор класса. Закрывает соединение с БД.
	 */
	~CDatabase();

	/**
	 * @brief Открыть файл БД и установить соединение.
	 * @param filename - имя файла БД.
	 * @return true в случае удачного соединения, либо false иначе.
	 */
	bool open(const string filename);
	
	/**
	 * @brief Выполнить SQL-запрос.
	 * @param query - строка с SQL-запросом.
	 */
	vector<vector<string> > query(const string query);
	/**
	 * @brief Закрыть соединение с БД.
	 */
	void close();

private:
	/**
	 * @brief Дескриптор открытой БД.
	 */
	sqlite3 *database;
};
 
#endif
